﻿using InDepth2Demo.Chapter1.C14;
using System;
using System.Collections.Generic;
using System.Linq;

namespace InDepth2Demo.Chapter1.C22
{
    internal class ProductComparerCall
    {
        // 相比 C21 中改进：弱类型变成强类型
        static void Call()
        {
            List<Product> products = Product.GetSampleProducts();

            products.Sort(new ProductNameComparer());

            foreach (Product product in products)
            {
                Console.WriteLine(product);
            }
        }

        //改进：不需要实现一个接口来实现排序，而是使用一个委托来比较
        static void Call2()
        {
            List<Product> products = Product.GetSampleProducts();
            products.Sort(
                delegate (Product x, Product y)
                {
                    return x.Name.CompareTo(y.Name);
                }
            );
            foreach (Product product in products)
            {
                Console.WriteLine(product);
            }
        }

        //从 匿名方法 替换成 Lambda表达式
        static void Call3()
        {
            List<Product> products = Product.GetSampleProducts();
            products.Sort((x, y) => x.Name.CompareTo(y.Name));
            foreach (Product product in products)
            {
                Console.WriteLine(product);
            }
        }

        //直接使用扩展方法
        // 我们的想法是“列表按名称排序”，现在的代码正是这样做的。并不是“列表通过将一个产品的名称与另一个产品的名称进行比较来排序”，像C#2.0代码所做的那样。
        static void Call4()
        {
            List<Product> products = Product.GetSampleProducts();
            foreach (Product product in products.OrderBy(p => p.Name))
            {
                Console.WriteLine(product);
            }
        }
    }
}
